﻿using System;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.VersionControl.Client;

namespace CodePlex.TeamFoundation.Adapters.VersionControl
{
  class VersionControlServerAdapter : IVersionControlServer
  {
    #region Constructors

    // Hide the default constructor
    private VersionControlServerAdapter() { }

    // Always require a VersionControlServer when creating an instance of this class 
    public VersionControlServerAdapter(VersionControlServer versionControlServer)
    {
      tfsVersionControlServer = versionControlServer;
    }

    #endregion

    #region Private Variables

    private VersionControlServer tfsVersionControlServer;

    #endregion

    #region IVersionControlServer Members

    public VersionControlArtifactProvider ArtifactProvider
    {
      get { throw new NotImplementedException(); }
    }

    public string AuthenticatedUser
    {
      get { throw new NotImplementedException(); }
    }

    public bool Canceled
    {
      get
      {
        throw new NotImplementedException();
      }
      set
      {
        throw new NotImplementedException();
      }
    }

    public string CurrentCommand
    {
      get
      {
        throw new NotImplementedException();
      }
      set
      {
        throw new NotImplementedException();
      }
    }

    public Guid ServerGuid
    {
      get { throw new NotImplementedException(); }
    }

    public int SupportedFeatures
    {
      get { throw new NotImplementedException(); }
    }

    public TeamFoundationServer TeamFoundationServer
    {
      get { throw new NotImplementedException(); }
    }

    public event AfterWorkItemsUpdatedEventHandler AfterWorkItemsUpdated;

    public event ProcessingChangeEventHandler BeforeCheckinPendingChange;

    public event WorkspaceCancelEventHandler BeforeDeleteWorkspace;

    public event ProcessingChangeEventHandler BeforeShelvePendingChange;

    public event BeforeWorkItemsUpdateEventHandler BeforeWorkItemsUpdate;

    public event CommitCheckinEventHandler CommitCheckin;

    public event CommitShelvesetEventHandler CommitShelveset;

    public event ConflictEventHandler Conflict;

    public event WorkspaceEventHandler CreatedWorkspace;

    public event DeletedShelvesetEventHandler DeletedShelveset;

    public event WorkspaceEventHandler DeletedWorkspace;

    public event DestroyedEventHandler Destroyed;

    public event GettingEventHandler Getting;

    public event MergeEventHandler Merging;

    public event PendingChangeEventHandler NewPendingChange;

    public event ExceptionEventHandler NonFatalError;

    public event OperationEventHandler OperationFinished;

    public event OperationEventHandler OperationStarting;

    public event ResolvedConflictEventHandler ResolvedConflict;

    public event PendingChangeEventHandler UndonePendingChange;

    public event UnshelveShelvesetEventHandler UnshelveShelveset;

    public event WorkspaceEventHandler UpdatedWorkspace;

    public event WorkItemUpdatedEventHandler WorkItemUpdated;

    public LabelResult[] CreateLabel(VersionControlLabel label, LabelItemSpec[] itemSpecs, LabelChildOption options)
    {
      throw new NotImplementedException();
    }

    public void CreateTeamProjectFolder(TeamProjectFolderOptions options)
    {
      throw new NotImplementedException();
    }

    public Workspace CreateWorkspace(string name)
    {
      throw new NotImplementedException();
    }

    public Workspace CreateWorkspace(string name, string owner)
    {
      throw new NotImplementedException();
    }

    public Workspace CreateWorkspace(string name, string owner, string comment)
    {
      throw new NotImplementedException();
    }

    public Workspace CreateWorkspace(string name, string owner, string comment, WorkingFolder[] mappings)
    {
      throw new NotImplementedException();
    }

    public Workspace CreateWorkspace(string name, string owner, string comment, WorkingFolder[] mappings, string computer)
    {
      throw new NotImplementedException();
    }

    public Workspace CreateWorkspace(string name, string owner, string comment, WorkingFolder[] mappings, string computer, bool fixMappingErrors)
    {
      throw new NotImplementedException();
    }

    public LabelResult[] DeleteLabel(string labelName, string labelScope)
    {
      throw new NotImplementedException();
    }

    public void DeleteShelveset(Shelveset shelveset)
    {
      throw new NotImplementedException();
    }

    public void DeleteShelveset(string shelvesetName, string shelvesetOwner)
    {
      throw new NotImplementedException();
    }

    public bool DeleteWorkspace(string workspaceName, string workspaceOwner)
    {
      throw new NotImplementedException();
    }

    public Item[] Destroy(ItemSpec itemSpec, VersionSpec versionSpec, VersionSpec stopAt, Microsoft.TeamFoundation.VersionControl.Common.DestroyFlags flags)
    {
      throw new NotImplementedException();
    }

    public void DownloadFile(string serverPath, string localFileName)
    {
      throw new NotImplementedException();
    }

    public void DownloadFile(string serverPath, int deletionId, VersionSpec version, string localFileName)
    {
      throw new NotImplementedException();
    }

    public string[] GetAllCheckinNoteFieldNames()
    {
      throw new NotImplementedException();
    }

    public TeamProject[] GetAllTeamProjects(bool refresh)
    {
      throw new NotImplementedException();
    }

    public BranchHistoryTreeItem[][] GetBranchHistory(ItemSpec[] itemSpecs, VersionSpec version)
    {
      throw new NotImplementedException();
    }

    public Changeset GetChangeset(int changesetId)
    {
      throw new NotImplementedException();
    }

    public Changeset GetChangeset(int changesetId, bool includeChanges, bool includeDownloadInfo)
    {
      throw new NotImplementedException();
    }

    public CheckinNoteFieldDefinition[] GetCheckinNoteDefinitions(TeamProject[] teamProjects)
    {
      throw new NotImplementedException();
    }

    public CheckinNoteFieldDefinition[] GetCheckinNoteDefinitionsForServerPaths(string[] serverItems)
    {
      throw new NotImplementedException();
    }

    public PolicyEnvelope[] GetCheckinPoliciesForServerPaths(string[] serverItems)
    {
      throw new NotImplementedException();
    }

    public string[] GetEffectiveGlobalPermissions(string userName)
    {
      throw new NotImplementedException();
    }

    public string[] GetEffectivePermissions(string userName, string item)
    {
      throw new NotImplementedException();
    }

    public ExtendedItem[][] GetExtendedItems(ItemSpec[] itemSpecs, DeletedState deletedState, ItemType itemType)
    {
      throw new NotImplementedException();
    }

    public ExtendedItem[] GetExtendedItems(string path, DeletedState deletedState, ItemType itemType)
    {
      throw new NotImplementedException();
    }

    public FileType[] GetFileTypes()
    {
      throw new NotImplementedException();
    }

    public GlobalSecurity GetGlobalPermissions(string[] identityNames)
    {
      throw new NotImplementedException();
    }

    public Item GetItem(string path)
    {
      throw new NotImplementedException();
    }

    public Item GetItem(int itemId, int changesetNumber)
    {
      throw new NotImplementedException();
    }

    public Item GetItem(string path, VersionSpec version)
    {
      throw new NotImplementedException();
    }

    public Item GetItem(int itemId, int changesetNumber, bool includeDownloadInfo)
    {
      throw new NotImplementedException();
    }

    public Item GetItem(int itemId, int changesetNumber, GetItemsOptions options)
    {
      throw new NotImplementedException();
    }

    public Item GetItem(string path, VersionSpec version, int deletionId)
    {
      throw new NotImplementedException();
    }

    public Item GetItem(string path, VersionSpec version, int deletionId, bool includeDownloadInfo)
    {
      throw new NotImplementedException();
    }

    public Item GetItem(string path, VersionSpec version, int deletionId, GetItemsOptions options)
    {
      throw new NotImplementedException();
    }

    public ItemSet GetItems(string path)
    {
      throw new NotImplementedException();
    }

    public Item[] GetItems(int[] itemIds, int changesetNumber)
    {
      throw new NotImplementedException();
    }

    public ItemSet GetItems(string path, RecursionType recursion)
    {
      throw new NotImplementedException();
    }

    public Item[] GetItems(int[] itemIds, int changesetNumber, bool includeDownloadInfo)
    {
      throw new NotImplementedException();
    }

    public Item[] GetItems(int[] itemIds, int changesetNumber, GetItemsOptions options)
    {
      throw new NotImplementedException();
    }

    public ItemSet GetItems(string path, VersionSpec version, RecursionType recursion)
    {
      throw new NotImplementedException();
    }

    public ItemSet[] GetItems(ItemSpec[] itemSpecs, VersionSpec version, DeletedState deletedState, ItemType itemType)
    {
      throw new NotImplementedException();
    }

    public ItemSet GetItems(ItemSpec itemSpec, VersionSpec version, DeletedState deletedState, ItemType itemType, bool includeDownloadInfo)
    {
      throw new NotImplementedException();
    }

    public ItemSet GetItems(ItemSpec itemSpec, VersionSpec version, DeletedState deletedState, ItemType itemType, GetItemsOptions options)
    {
      throw new NotImplementedException();
    }

    public ItemSet[] GetItems(ItemSpec[] itemSpecs, VersionSpec version, DeletedState deletedState, ItemType itemType, bool includeDownloadInfo)
    {
      throw new NotImplementedException();
    }

    public ItemSet[] GetItems(ItemSpec[] itemSpecs, VersionSpec version, DeletedState deletedState, ItemType itemType, GetItemsOptions options)
    {
      throw new NotImplementedException();
    }

    public ItemSet GetItems(string path, VersionSpec version, RecursionType recursion, DeletedState deletedState, ItemType itemType)
    {
      throw new NotImplementedException();
    }

    public ItemSet GetItems(string path, VersionSpec version, RecursionType recursion, DeletedState deletedState, ItemType itemType, bool includeDownloadInfo)
    {
      throw new NotImplementedException();
    }

    public int GetLatestChangesetId()
    {
      throw new NotImplementedException();
    }

    public MergeCandidate[] GetMergeCandidates(ItemSpec source, string targetPath)
    {
      throw new NotImplementedException();
    }

    public MergeCandidate[] GetMergeCandidates(string sourcePath, string targetPath, RecursionType recursion)
    {
      throw new NotImplementedException();
    }

    public PendingChange GetPendingChange(int pendingChangeId)
    {
      throw new NotImplementedException();
    }

    public PendingChange GetPendingChange(int pendingChangeId, bool includeDownloadInfo)
    {
      throw new NotImplementedException();
    }

    public PendingChange[] GetPendingChanges(int[] pendingChangeIds)
    {
      throw new NotImplementedException();
    }

    public PendingChange[] GetPendingChanges(int[] pendingChangeIds, bool includeDownloadInfo)
    {
      throw new NotImplementedException();
    }

    public PendingSet[] GetPendingSets(string[] items, RecursionType recursion)
    {
      throw new NotImplementedException();
    }

    public ItemSecurity[] GetPermissions(string[] items, RecursionType recursion)
    {
      throw new NotImplementedException();
    }

    public ItemSecurity[] GetPermissions(string[] identityNames, string[] items, RecursionType recursion)
    {
      throw new NotImplementedException();
    }

    public TeamProject GetTeamProject(string name)
    {
      throw new NotImplementedException();
    }

    public TeamProject GetTeamProjectForServerPath(string serverPath)
    {
      throw new NotImplementedException();
    }

    public TeamProject[] GetTeamProjectsForServerPaths(string[] serverPaths)
    {
      throw new NotImplementedException();
    }

    public Workspace GetWorkspace(string localPath)
    {
      throw new NotImplementedException();
    }

    public Workspace GetWorkspace(WorkspaceInfo workspaceInfo)
    {
      throw new NotImplementedException();
    }

    public Workspace GetWorkspace(string workspaceName, string workspaceOwner)
    {
      throw new NotImplementedException();
    }

    public System.Collections.IEnumerable QueryHistory(string path, VersionSpec version, int deletionId, RecursionType recursion, string user, VersionSpec versionFrom, VersionSpec versionTo, int maxCount, bool includeChanges, bool slotMode)
    {
      throw new NotImplementedException();
    }

    public System.Collections.IEnumerable QueryHistory(string path, VersionSpec version, int deletionId, RecursionType recursion, string user, VersionSpec versionFrom, VersionSpec versionTo, int maxCount, bool includeChanges, bool slotMode, bool includeDownloadInfo)
    {
      throw new NotImplementedException();
    }

    public VersionControlLabel[] QueryLabels(string labelName, string labelScope, string owner, bool includeItems)
    {
      throw new NotImplementedException();
    }

    public VersionControlLabel[] QueryLabels(string labelName, string labelScope, string owner, bool includeItems, string filterItem, VersionSpec versionFilterItem)
    {
      throw new NotImplementedException();
    }

    public VersionControlLabel[] QueryLabels(string labelName, string labelScope, string owner, bool includeItems, string filterItem, VersionSpec versionFilterItem, bool includeDownloadInfo)
    {
      throw new NotImplementedException();
    }

    public ChangesetMerge[] QueryMerges(string sourcePath, VersionSpec sourceVersion, string targetPath, VersionSpec targetVersion, VersionSpec versionFrom, VersionSpec versionTo, RecursionType recursion)
    {
      throw new NotImplementedException();
    }

    public ChangesetMergeDetails QueryMergesWithDetails(string sourcePath, VersionSpec sourceVersion, int sourceDeletionId, string targetPath, VersionSpec targetVersion, int targetDeletionId, VersionSpec versionFrom, VersionSpec versionTo, RecursionType recursion)
    {
      throw new NotImplementedException();
    }

    public PendingSet[] QueryPendingSets(ItemSpec[] itemSpecs, string queryWorkspaceName, string queryUserName)
    {
      throw new NotImplementedException();
    }

    public PendingSet[] QueryPendingSets(ItemSpec[] itemSpecs, string queryWorkspaceName, string queryUserName, bool includeDownloadInfo)
    {
      throw new NotImplementedException();
    }

    public PendingSet[] QueryPendingSets(string[] items, RecursionType recursion, string queryWorkspaceName, string queryUserName)
    {
      throw new NotImplementedException();
    }

    public PendingSet[] QueryShelvedChanges(Shelveset shelveset)
    {
      throw new NotImplementedException();
    }

    public PendingSet[] QueryShelvedChanges(Shelveset shelveset, ItemSpec[] itemSpecs)
    {
      throw new NotImplementedException();
    }

    public PendingSet[] QueryShelvedChanges(string shelvesetName, string shelvesetOwner)
    {
      throw new NotImplementedException();
    }

    public PendingSet[] QueryShelvedChanges(string shelvesetName, string shelvesetOwner, ItemSpec[] itemSpecs)
    {
      throw new NotImplementedException();
    }

    public PendingSet[] QueryShelvedChanges(string shelvesetName, string shelvesetOwner, ItemSpec[] itemSpecs, bool includeDownloadInfo)
    {
      throw new NotImplementedException();
    }

    public Shelveset[] QueryShelvesets(string shelvesetName, string shelvesetOwner)
    {
      throw new NotImplementedException();
    }

    public Workspace[] QueryWorkspaces(string workspaceName, string workspaceOwner, string computer)
    {
      throw new NotImplementedException();
    }

    public void RenameCheckinNoteFieldName(string path, string oldName, string newName)
    {
      throw new NotImplementedException();
    }

    public bool ServerItemExists(string path, ItemType itemType)
    {
      throw new NotImplementedException();
    }

    public bool ServerItemExists(string path, VersionSpec version, DeletedState deletedState, ItemType itemType)
    {
      throw new NotImplementedException();
    }

    public void SetFileTypes(FileType[] fileTypes)
    {
      throw new NotImplementedException();
    }

    public PermissionChange[] SetGlobalPermissions(PermissionChange[] permissionChanges)
    {
      throw new NotImplementedException();
    }

    public SecurityChange[] SetPermissions(SecurityChange[] securityChanges)
    {
      throw new NotImplementedException();
    }

    public TeamProject TryGetTeamProject(string name)
    {
      throw new NotImplementedException();
    }

    public TeamProject TryGetTeamProjectForServerPath(string serverPath)
    {
      throw new NotImplementedException();
    }

    public Workspace TryGetWorkspace(string localPath)
    {
      throw new NotImplementedException();
    }

    public LabelResult[] UnlabelItem(string labelName, string labelScope, ItemSpec[] itemSpecs, VersionSpec version)
    {
      throw new NotImplementedException();
    }

    public void UpdateUserName()
    {
      throw new NotImplementedException();
    }

    #endregion
  }
}
